package com.shujia.scala

object Demo7Fun {
  def main(args: Array[String]): Unit = {

    /**
      * 函数   可以在任何地方定义
      *
      */

    //调用函数  直接通过函数名调用


    def fun(str: String): String = {
      println("函数")

      if (str.equals("数加")) {

        //可以省略return
        "数加"
      } else if (str.equals("java")) {

        "java"
      } else {

        "其他"
      }

    }

    val str = fun("数加")
    println(str)


    //可变参数的函数  i: Int*
    def fun1(i: Int*)= {

      var sum = 0

      for (elem <- i) {
        sum += elem
      }

      //最后一行作为返回值
      sum
    }

    val sum = fun1(1, 2, 3, 4, 5)

    println(sum)


    //函数参数的默认值    post: Int = 6379
    def fun2(post: Int = 6379, host: String)= {
      println(host + "\t" + post)
    }

    //指定参数名赋值
    fun2(host = "node3")
    fun2(post = 7000, host = "node3")


    /**
      * 函数简写
      * 1、如果函数没有参数  括号可以不写
      * 2、如果最后一行作为返回值 return 可以不写
      * 3、如果代码只有一行  ，{} 不写不写
      * 4、返回值类型可以不写  会自动推断出返回类型
      *
      */

    def fun3 = "shujia"


    /**
      * 递归  自己调用自己
      *
      * 1、出口
      *
      */
    // 求10的阶乘

    def jiecheng(i: Int): Int = {

      if (i == 1) {

        //return  不能省略
        return 1
      }
      i * jiecheng(i - 1)

    }

    println(jiecheng(10))


  }
}
